/*
 * ReasignacionHelper.java
 *
 * Created on 13 de junio de 2007, 05:19 PM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.radar.distribucion.reasignacion.helper;

import com.src.computec.radar.base.dao.exception.DAOException;
import com.src.computec.radar.distribucion.base.constantes.ConstantesGenerales;
import com.src.computec.radar.distribucion.base.helper.BaseHelper;
import com.src.computec.radar.distribucion.reasignacion.dao.BaseReasignacionDAO;
import com.src.computec.radar.distribucion.reasignacion.dto.ReasignacionDistribucionDto;
import com.src.computec.radar.distribucion.reasignacion.exception.ReasignacionException;
import com.src.computec.radar.distribucion.thread.FileThread;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author aocampo
 */
public class ReasignacionHelper extends BaseHelper {
    
    /** Creates a new instance of ReasignacionHelper */
    public ReasignacionHelper() {
    }   
    
    public List processReasignacionesDistribucion(ReasignacionDistribucionDto dto, String ldapUser) throws ReasignacionException {
        BaseReasignacionDAO dao = (BaseReasignacionDAO) this.getFactoryDAO().getReasignacionDAO();
        try {
            Hashtable hashtable = dao.getReasignacionesDistribucion(dto);
            List listReasignacionesDistribucion = (List) hashtable.get("listReasignacionesDistribucion");
            List listDetail = (List) hashtable.get("listDetail");
            if (!listReasignacionesDistribucion.isEmpty()) {
                dao.insertReasignacionesDistribucion(listReasignacionesDistribucion);
            }
            return listDetail;
        }
        catch (DAOException e) {
            throw new ReasignacionException("ReasignacionHelper:processReasignacionesDistribucion: " + e.toString());
        }
    }
    
    public List getReasignacionesDistribucion() throws ReasignacionException {
        BaseReasignacionDAO dao = (BaseReasignacionDAO) this.getFactoryDAO().getReasignacionDAO();
        try {
            return dao.getReasignacionesDistribucion();
        }
        catch (DAOException e) {
            throw new ReasignacionException("ReasignacionHelper:processReasignacionesDistribucion: " + e.toString());
        }
    }
    
    public List processReasignacionesDistribucionSelected(List listReasignacionesDistribucion, String uidEvaluacion) throws ReasignacionException {
        BaseReasignacionDAO dao = (BaseReasignacionDAO) this.getFactoryDAO().getReasignacionDAO();
        try {
            Hashtable hashtable = dao.updateEnvios(listReasignacionesDistribucion, uidEvaluacion);
            List listReasignacionesDistribucionAll = (List) hashtable.get("listReasignacionesDistribucionAll");	   
            List listReasignacionesNoAplicadas = (List) hashtable.get("listReasignacionesNoAplicadas");
            if (listReasignacionesNoAplicadas != null && !listReasignacionesNoAplicadas.isEmpty()) {
                String fileName = ConstantesGenerales.RANDOM_STRING_UTILS.randomAlphanumeric(20) + ConstantesGenerales.FILE_EXTENSION;
                Thread thread = new Thread(new FileThread(FileThread.FILE_INCONSISTENCIAS, fileName, listReasignacionesNoAplicadas));
                thread.start();
                dao.insertMensajeAlerta(fileName, uidEvaluacion, listReasignacionesNoAplicadas.size());
            }
            return listReasignacionesDistribucionAll;
        }
        catch (DAOException e) {
            throw new ReasignacionException("ReasignacionHelper:processReasignacionesDistribucionSelected: " + e.toString());
        }
    }
    
    public List denegarReasignaciones(List listReasignacionesDistribucion, String uidEvaluacion) throws ReasignacionException {
        BaseReasignacionDAO dao = (BaseReasignacionDAO) this.getFactoryDAO().getReasignacionDAO();
        try {
            return dao.denegarReasignaciones(listReasignacionesDistribucion, uidEvaluacion);
        }
        catch (DAOException e) {
            throw new ReasignacionException("ReasignacionHelper:denegarReasignaciones: " + e.toString());
        }
    }
}